 <?PHP
require_once _DIRETORIO_BACKEND_._SEPARADOR_DIRETORIO_.'db.php';
require_once _DIRETORIO_BACKEND_VO_._SEPARADOR_DIRETORIO_.'VOcidade.php';
require_once _DIRETORIO_BACKEND_DB_._SEPARADOR_DIRETORIO_.'Paginacao.php';
/**
* Esta Classe é responsável por inserir ou atualizar um registro de cidade.
* @name DBcidade
* @version 0.1
* @access public
* @package DB
**/
abstract Class DBcidade{
	/**
	 * Método responsável por retornar os dados. 
	 * @param int $idCidade
	 * @access public
	 * @return oVO cidade
	 */
	public function getByID($idCidade){
            $DB= new DB();
            $dbh = $DB->conec();
            $oVO = new VOcidade();
            try{
                $sql = "SELECT * FROM CIDADE WHERE idCidade =:idCidade";
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam (':idCidade',$idCidade,PDO::PARAM_INT);
                $stmt->execute();
                $oVO = $stmt->fetch(PDO::FETCH_OBJ);
            } 
            catch(PDOException $e){
                $DB->DBerror($e,$sql);
            }
            return $oVO;
	}
	/**
	 * Método responsável por montar um Sql de busca. 
	 * @param objeto $oVO 
	 * @param $pag 
	 * @access public
	 * @return resultado da Busca.
	 */
	public function get($oVO,$pag,$limitePagina){	
		$DB = new DB();
		$dbh = $DB->conec();		
	  	if(!isset($first)){$first = false;}
	  	try{
                    $sql = "SELECT * FROM CIDADE WHERE idEstado =:idEstado";
                    
                    if(!empty($oVO->nome)){
                           $sql.=$this->getSQLFirst($first)."nome like :nome" ;
                    }                    
                    $sql.=" order by nome";

                    if(isset($pag)){
                           $pg1 = ($limitePagina*($pag-1));
                           $sql.=" limit ".$pg1." , ".$limitePagina;
                    }

                    $stmt = $dbh->prepare($sql);
                    $stmt->bindParam(':idEstado',$oVO->idEstado,PDO::PARAM_INT);

                    if(!empty($oVO->nome)){
                           $oVO->nome = "%".$oVO->nome."%";
                           $stmt->bindParam(':nome',$oVO->nome,PDO::PARAM_STR);
                    }	  	  	 
                    $stmt->execute();
                    $result = $stmt->fetchAll(PDO::FETCH_CLASS,"VOcidade");

	  	}
		catch (PDOException $e){
			 $DB->DBerror($e, $sql);
		}

		return $result;

	}
	
  	/**
	 * Método responsável por adicionar à string do SQl a clausula WHERE ou AND. 
	 * @param boolean $first 
	 * @access public
	 * @return Where ou AND.
	 */
	public function getSqlFirst(&$first){
	    $return = " AND ";
	    if($first){$return=" WHERE ";$first=true;}
	    return($return);
	}
	
   	/**
	 * Método responsável por inserir ou atulizar um registro. 
	 * @param objeto $oVO 
	 * @access public
	 */	
	public function save($oVO){
            $DB = new DB();
            $dbh = $DB->conec();
            if($oVO->idCidade > 0){
                $sql = "UPDATE CIDADE SET 
                               idEstado =:idEstado
                               ,nome =:nome
                         WHERE idCidade =:idCidade" ;
                $stmt = $dbh->prepare($sql);
                $stmt->bindParam(':idCidade',$oVO->idCidade,PDO::PARAM_INT);
            } else {
                $sql = "INSERT INTO CIDADE 
                                (idEstado		               
                                ,nome)
                          VALUES
                                (:idEstado
                                ,:nome)";         
                $stmt = $dbh->prepare($sql);
            }
            $stmt->bindParam(':idEstado',$oVO->idEstado,PDO::PARAM_INT);
            $stmt->bindParam(':nome',mb_convert_encoding($oVO->nome, "ISO-8859-1", "UTF-8"),PDO::PARAM_STR);
            $stmt->execute();
            if($oVO->idCidade == 0){
                $sql = "SELECT LAST_INSERT_ID()";
                $stmt = $dbh->prepare($sql);
                $stmt->execute();
                $lastId = $stmt->fetchColumn();
                return $lastId;
            }
            return $oVO->idCidade;
	}
		
	/**
	 * Método responsável por deletar um registro. 
	 * @param int $idCidade
	 * @access public
	 */
	public function delete($idCidade){
			
            $DB = new DB();
            $dbh = $DB->conec();		

            $sql = "DELETE FROM CIDADE WHERE idCidade=:idCidade";	

            $stmt = $dbh->prepare($sql);
            $stmt->bindParam(':idCidade',$idCidade,PDO::PARAM_INT);
            $stmt->execute();
		
	}

}
